package com.csdn.springbootmybatis.service.impl;

import com.csdn.springbootmybatis.RespStat;
import com.csdn.springbootmybatis.mapper.AccountMapper;
import com.csdn.springbootmybatis.mode.Account;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * @Author: JLL
 * @Date: 2019/8/20 14:24
 */
@Service
@Slf4j
public class AccountService {

    @Resource
    private AccountMapper accMapper;

    public Account findByLoginNameAndPassword(String loginName, String password){
        /*AccountExample accountExample = new AccountExample();
        accountExample.createCriteria()
                .andLoginNameEqualTo(loginName)
                .andPasswordEqualTo(password);*/
        List<Account> list = accMapper.selectByLoginNameAndPassword(loginName,password);
        log.info("list={}",list);
        return list.size() ==0 ?null :list.get(0);  //数据库加了唯一索引就不会有多条数据
    }

    /***
     *
     * @param pageNum  第几页
     * @param pageSize 每页数量
     * @return
     */
    public PageInfo<Account> findByPage(int pageNum, int pageSize) {
        //这句话会发2个sql。  1、SELECT count(0) FROM account   查出总条数  8个
        //select id, login_name, password, nick_name, age, location, role from account LIMIT ? ?  传入第几页和每页数量
        //翻页原理是AOP
        PageHelper.startPage(pageNum, pageSize);

        List<Account> list = accMapper.selectAll();
        return new PageInfo<>(list,pageSize);
    }

    public PageInfo<Account> selectByPermission(int pageNum, int pageSize) {
        //这句话会发2个sql。  1、SELECT count(0) FROM account   查出总条数  8个
        //select id, login_name, password, nick_name, age, location, role from account LIMIT ? ?  传入第几页和每页数量
        //翻页原理是AOP
        PageHelper.startPage(pageNum, pageSize);

        List<Account> list = accMapper.selectByPermission();
        log.info("list.size()={} ," + list.size());
        log.info("多表查询getRoleList个数是={} ," + list.get(0).getRoleList().size());
        log.info("多表查询getPermissionList个数是={} ," + list.get(0).getPermissionList().size());
        return new PageInfo<>(list,pageSize);
    }


    public RespStat deleteById(int id) {
        // 1. 要提示用户
        // 2. 通过删除标记 数据永远删不掉    / 有的公司对于update 也只是做增，而不是直接改表内容  // 1、历史数据表（或另一个数据库）  -> 2、写文本log
        //那这样是不是导致数据越来越多呢，其实数据库里一万行 十几万行数据 算多吗？，真不多。
        int row = accMapper.deleteByPrimaryKey(id);
        if(row == 1) {
            return RespStat.build(200);
        }else {
            return RespStat.build(500,"删除出错");
        }
    }

    public void update(Account account) {
        accMapper.updateByPrimaryKeySelective(account)	;
    }
}
